name: Docs Integration Tests

on:
  pull_request_review:
    types: [submitted]
  push:
    branches:
      - main
      - dev
jobs:
  test:
    if: github.event.review.state == 'APPROVED' || github.event_name == 'push'
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.9"]
    env:
      AWS_DEFAULT_REGION: ${{ secrets.INTEG_AWS_DEFAULT_REGION }}
      AWS_ACCESS_KEY_ID: ${{ secrets.INTEG_AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.INTEG_AWS_SECRET_ACCESS_KEY }}
      OPENAI_API_KEY: ${{ secrets.INTEG_OPENAI_API_KEY}}
      DYNAMODB_TABLE_NAME: ${{ secrets.INTEG_DYNAMODB_TABLE_NAME }}
      MARQO_API_KEY: ${{ secrets.INTEG_MARQO_API_KEY }}
      MARQO_INDEX_NAME: ${{ secrets.INTEG_MARQO_INDEX_NAME }}
      MARQO_URL: ${{ secrets.INTEG_MARQO_URL }}
      PINECONE_API_KEY: ${{ secrets.INTEG_PINECONE_API_KEY }}
      PINECONE_ENVIRONMENT: ${{ secrets.INTEG_PINECONE_ENVIRONMENT }}
      PINECONE_INDEX_NAME: ${{ secrets.INTEG_PINECONE_INDEX_NAME }}
      REDSHIFT_CLUSTER_IDENTIFIER: ${{ secrets.INTEG_REDSHIFT_CLUSTER_IDENTIFIER }}
      REDSHIFT_DATABASE: ${{ secrets.INTEG_REDSHIFT_DATABASE }}
      SNOWFLAKE_ACCOUNT: ${{ secrets.INTEG_SNOWFLAKE_ACCOUNT }}
      SNOWFLAKE_DATABASE: ${{ secrets.INTEG_SNOWFLAKE_DATABASE }}
      SNOWFLAKE_PASSWORD: ${{ secrets.INTEG_SNOWFLAKE_PASSWORD }}
      SNOWFLAKE_SCHEMA: ${{ secrets.INTEG_SNOWFLAKE_SCHEMA }}
      SNOWFLAKE_USER: ${{ secrets.INTEG_SNOWFLAKE_USER }}
      SNOWFLAKE_WAREHOUSE: ${{ secrets.INTEG_SNOWFLAKE_WAREHOUSE }}
      REDIS_HOST: ${{ secrets.INTEG_REDIS_HOST }}
      REDIS_INDEX: ${{ secrets.INTEG_REDIS_INDEX }}
      REDIS_PASSWORD: ${{ secrets.INTEG_REDIS_PASSWORD }}
      REDIS_PORT: ${{ secrets.INTEG_REDIS_PORT }}
      MONGODB_HOST: ${{ secrets.INTEG_MONGODB_HOST }}
      MONGODB_USERNAME: ${{ secrets.INTEG_MONGODB_USERNAME }}
      MONGODB_DATABASE_NAME: ${{ secrets.INTEG_MONGODB_DATABASE_NAME }}
      MONGODB_COLLECTION_NAME: ${{ secrets.INTEG_MONGODB_COLLECTION_NAME }}
      MONGODB_PASSWORD: ${{ secrets.INTEG_MONGODB_PASSWORD }}
      MONGODB_INDEX_NAME: ${{ secrets.INTEG_MONGODB_INDEX_NAME }}
      MONGODB_VECTOR_PATH: ${{ secrets.INTEG_MONGODB_VECTOR_PATH }}
      AZURE_MONGODB_HOST: ${{ secrets.INTEG_AZURE_MONGODB_HOST }}
      AZURE_MONGODB_USERNAME: ${{ secrets.INTEG_AZURE_MONGODB_USERNAME }}
      AZURE_MONGODB_PASSWORD: ${{ secrets.INTEG_AZURE_MONGODB_PASSWORD }}
      AZURE_MONGODB_DATABASE_NAME: ${{ secrets.INTEG_AZURE_MONGODB_DATABASE_NAME }}
      AZURE_MONGODB_COLLECTION_NAME: ${{ secrets.INTEG_AZURE_MONGODB_COLLECTION_NAME }}
      AZURE_MONGODB_INDEX_NAME: ${{ secrets.INTEG_AZURE_MONGODB_INDEX_NAME }}
      AZURE_MONGODB_VECTOR_PATH: ${{ secrets.INTEG_AZURE_MONGODB_VECTOR_PATH }}
      AMAZON_OPENSEARCH_HOST: ${{ secrets.INTEG_AMAZON_OPENSEARCH_HOST }}
      AMAZON_OPENSEARCH_INDEX_NAME: ${{ secrets.INTEG_AMAZON_OPENSEARCH_INDEX_NAME }}
      GOOGLE_API_KEY: ${{ secrets.INTEG_GOOGLE_API_KEY }}
      GOOGLE_API_SEARCH_ID: ${{ secrets.INTEG_GOOGLE_API_SEARCH_ID }}
      GOOGLE_CERT_URL: ${{ secrets.INTEG_GOOGLE_CLIENT_X509_CERT_URL }}
      GOOGLE_ACCOUNT_TYPE: ${{ secrets.INTEG_GOOGLE_ACCOUNT_TYPE }}
      GOOGLE_PROJECT_ID: ${{ secrets.INTEG_GOOGLE_PROJECT_ID }}
      GOOGLE_PRIVATE_KEY_ID: ${{ secrets.INTEG_GOOGLE_PRIVATE_KEY_ID }}
      GOOGLE_PRIVATE_KEY: ${{ secrets.INTEG_GOOGLE_PRIVATE_KEY }}
      GOOGLE_CLIENT_EMAIL: ${{ secrets.INTEG_GOOGLE_CLIENT_EMAIL }}
      GOOGLE_CLIENT_ID: ${{ secrets.INTEG_GOOGLE_CLIENT_ID }}
      GOOGLE_AUTH_URI: ${{ secrets.INTEG_GOOGLE_AUTH_URI }}
      GOOGLE_TOKEN_URI: ${{ secrets.INTEG_GOOGLE_TOKEN_URI }}
      GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.INTEG_GOOGLE_AUTH_PROVIDER_X509_CERT_URL }}
      GRIPTAPE_CLOUD_API_KEY: ${{ secrets.INTEG_GRIPTAPE_CLOUD_API_KEY }}
      GRIPTAPE_CLOUD_STRUCTURE_ID: ${{ secrets.INTEG_GRIPTAPE_CLOUD_STRUCTURE_ID }}
      GRIPTAPE_CLOUD_BASE_URL: ${{ secrets.INTEG_GRIPTAPE_CLOUD_BASE_URL }}
      OPENWEATHER_API_KEY: ${{ secrets.INTEG_OPENWEATHER_API_KEY }}
      ANTHROPIC_API_KEY: ${{ secrets.INTEG_ANTHROPIC_API_KEY }}
      SAGEMAKER_LLAMA_ENDPOINT_NAME: ${{ secrets.INTEG_LLAMA_ENDPOINT_NAME }}
      SAGEMAKER_FALCON_ENDPOINT_NAME: ${{ secrets.INTEG_FALCON_ENDPOINT_NAME }}
      HUGGINGFACE_HUB_ACCESS_TOKEN: ${{ secrets.INTEG_HUGGINGFACE_HUB_ACCESS_TOKEN }}
      AZURE_OPENAI_ENDPOINT_1: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_1 }}
      AZURE_OPENAI_API_KEY_1: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_1 }}
      AZURE_OPENAI_ENDPOINT_2: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_2 }}
      AZURE_OPENAI_API_KEY_2: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_2 }}
      AZURE_OPENAI_ENDPOINT_3: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_3 }}
      AZURE_OPENAI_API_KEY_3: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_3 }}
      AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_35_TURBO_16K_DEPLOYMENT_ID }}
      AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_DAVINCI_DEPLOYMENT_ID }}
      AZURE_OPENAI_4_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_4_DEPLOYMENT_ID }}
      AZURE_OPENAI_4_32K_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_4_32K_DEPLOYMENT_ID }}
      AZURE_OPENAI_DALL_E_3_DEPLOYMENT_ID: ${{ secrets.INTEG_AZURE_OPENAI_DALL_E_3_DEPLOYMENT_ID }}
      AZURE_OPENAI_DEV_2_API_BASE: ${{ secrets.INTEG_AZURE_OPENAI_DEV_2_API_BASE }}
      AZURE_OPENAI_DEV_2_API_KEY: ${{ secrets.INTEG_AZURE_OPENAI_DEV_2_API_KEY }}
      AZURE_OPENAI_API_BASE: ${{ secrets.INTEG_AZURE_OPENAI_API_BASE }}
      COHERE_API_KEY: ${{ secrets.INTEG_COHERE_API_KEY }}
      GOOGLE_OWNER_EMAIL: ${{ secrets.INTEG_GOOGLE_OWNER_EMAIL }}
      LEONARDO_API_KEY: ${{ secrets.INTEG_LEONARDO_API_KEY }}
      LEONARDO_MODEL_ID: ${{ secrets.INTEG_LEONARDO_MODEL_ID }}
      SAGEMAKER_TENSORFLOW_HUB_MODEL: ${{ secrets.INTEG_SAGEMAKER_TENSORFLOW_HUB_MODEL }}
      SAGEMAKER_HUGGINGFACE_MODEL: ${{ secrets.INTEG_SAGEMAKER_HUGGINGFACE_MODEL }}
      POSTGRES_USER: ${{ secrets.INTEG_POSTGRES_USER }}
      POSTGRES_PASSWORD: ${{ secrets.INTEG_POSTGRES_PASSWORD }}
      POSTGRES_DB: ${{ secrets.INTEG_POSTGRES_DB }}
      POSTGRES_HOST: ${{ secrets.INTEG_POSTGRES_HOST }}
      POSTGRES_PORT: ${{ secrets.INTEG_POSTGRES_PORT }}
      VOYAGE_API_KEY: ${{ secrets.INTEG_VOYAGE_API_KEY }}
      WEBHOOK_URL: ${{ secrets.INTEG_WEBHOOK_URL }}
      AMAZON_SQS_QUEUE_URL: ${{ secrets.INTEG_AMAZON_SQS_QUEUE_URL }}
      GT_CLOUD_STRUCTURE_RUN_ID: ${{ secrets.INTEG_GT_CLOUD_STRUCTURE_RUN_ID }}
      AWS_IOT_CORE_ENDPOINT: ${{ secrets.INTEG_AWS_IOT_CORE_ENDPOINT }}
      AWS_IOT_CORE_TOPIC: ${{ secrets.INTEG_AWS_IOT_CORE_TOPIC }}
      ELEVEN_LABS_API_KEY: ${{ secrets.INTEG_ELEVEN_LABS_API_KEY }}
    services:
      postgres:
        image: ankane/pgvector:v0.5.0
        env:
          POSTGRES_USER: ${{ secrets.INTEG_POSTGRES_USER }}
          POSTGRES_PASSWORD: ${{ secrets.INTEG_POSTGRES_PASSWORD }}
          POSTGRES_DB: ${{ secrets.INTEG_POSTGRES_DB }}
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - name: Checkout actions
        uses: actions/checkout@v3
      - name: Init environment
        uses: ./.github/actions/init-environment
      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@v44
        if: github.event_name == 'pull_request_review'
        with:
          files: |
             **.md
      - name: List all changed files
        env:
          ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
        run: |
          for file in ${ALL_CHANGED_FILES}; do
            echo "$file was changed"
          done
      - name: Run integration tests
        if: steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'push'
        run: pytest -n auto tests/integration/test_code_blocks.py
        env:
          DOCS_ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files || '' }}
